package com.code.observer.common;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>目标对象、他知道观察它的观察者，并提供注册和删除观察者的接口</p>
 *
 * @author hwf
 * @version 1.0
 * @date 2021/12/8 0:15
 */
public class Subject<T extends Observe> {

    /**
     * 保存注册的观察者对象
     */
    private List<T> observeList = new ArrayList<T>();

    /**
     * 相集合中添加观察者
     *
     * @param observe
     */
    public void attach(T observe) {
        observeList.add(observe);
    }

    /**
     * 删除集合中指定的观察者
     *
     * @param observe
     */
    public void detach(T observe) {
        observeList.remove(observe);
    }

    /**
     * 通知所有组成的观察者对象
     */
    protected void notifyObserve() {
        for (T observe : observeList) {
            observe.update(this);
        }
    }
}
